/*  bin     gray
    0000    0000
    0001    0001
    0010    0011
    0011    0010
    0100    0110
    0101    0111
    0110    0101
    0111    0100
    1000    1100
    1001    1101
    1010    1111
    1011    1110
    1100    1010
    1101    1011
    1110    1001
    1111    1000
*/
module bin2gray
#(
    parameter DW = 8
)
(
    input   [DW-1:0]    bin,
    output  [DW-1:0]    gray
);

    assign gray = (bin>>1)^bin;
    
endmodule

module gray2bin
#(
    parameter   DW = 8
) 
(
    input   [DW-1:0]    gray,
    output  [DW-1:0]    bin
);

    assign bin[DW-1] = gray[DW-1];
    generate
        genvar v;
        for(v=0; v<DW-1; v=v+1)begin
            assign bin[v] = bin[v+1]^gray[v];
        end
    endgenerate
    
endmodule